package bm22;

/**
 * @author 兴趣使然黄小黄
 * @version 1.0
 * @date 2023/8/15 20:10
 * BM22. 比较版本号
 * https://www.nowcoder.com/practice/2b317e02f14247a49ffdbdba315459e7?tpId=295&tqId=1024572&ru=/exam/oj&qru=/ta/format-top101/question-ranking&sourceUrl=%2Fexam%2Foj
 */
public class Solution {

    // 双指针思路
    // version1 > version2 返回1，如果 version1 < version2 返回-1，不然返回0.
    public int compare (String version1, String version2) {
        if (version1 == null || version2 == null) {
            return 0;
        }
        // 双指针同时遍历两个版本号, 将 '.' 之间转化成数字, 忽略前导 0
        // 其中一个遍历完后, 每次迭代都是 0
        int n1 = version1.length();
        int n2 = version2.length();
        int i = 0, j = 0;
        while (i < n1 || j < n2) {
            int num1 = 0;
            while (i < n1 && version1.charAt(i) != '.') {
                num1 = 10 * num1 + (version1.charAt(i) - '0');
                i++;
            }
            i++; // 跳过 '.'
            int num2 = 0;
            while (j < n2 && version2.charAt(j) != '.') {
                num2 = 10 * num2 + (version2.charAt(j) - '0');
                j++;
            }
            j++; // 跳过 '.'
            // 比较版本号
            if (num1 > num2) {
                return 1;
            }
            if (num1 < num2) {
                return -1;
            }
        }
        return 0;
    }
}
